package vetxsoft.bean;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import vetxsoft.entity.Producto;
import vetxsoft.system.IVetexsoftSystem;

/**
 *
 * @author Fary Hurtado <hurtadofary@gmail.com>
 */
@ManagedBean
@SessionScoped
public class ProductoBean implements Serializable {

    @EJB
    private IVetexsoftSystem vetexsoftSystem;
    private Producto producto = new Producto();
    private boolean stored = false;

    public ProductoBean() {
    }

    public Producto getProducto() {
        return producto;
    }

    public void setProducto(Producto producto) {
        this.producto = producto;
    }

    public boolean isStored() {
        return stored;
    }

    public void setStored(boolean stored) {
        this.stored = stored;
    }

    public IVetexsoftSystem getVetexsoftSystem() {
        return vetexsoftSystem;
    }

    public List<String> unidadeDeMedidas() {

        LinkedList<String> unidades = new LinkedList<String>();

        unidades.add("Bulto");
        unidades.add("Gramo");
        unidades.add("Kilo");

        return unidades;
    }

    public List<Producto> obtenerProductosActivos() {
        try {

            return this.vetexsoftSystem.obtenerProductosActivos();

        } catch (Exception ex) {
            return null;
        }
    }
    public List<Producto> obtenerProductos() {
        try {

            return this.vetexsoftSystem.obtenerProductos();

        } catch (Exception ex) {
            return null;
        }
    }


    public void cancelAction() {

        this.producto = new Producto();
        this.stored = false;
    }

    public void saveAction() {
        try {


            this.producto.setStored(this.stored);

            if (this.producto.getEstado() == null) {
                this.producto.setEstado("Activo");
            } else if (!this.producto.getEstado().trim().equalsIgnoreCase("Inactivo")) {
                this.producto.setEstado("Activo");
            }

            this.producto.setCantidadActual(this.producto.getCantidad());

            this.vetexsoftSystem.saveProducto(producto);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "El producto ha sido registrado satisfactoriamente.", ""));

            this.producto = new Producto();
            this.stored = false;

        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido registrar el producto. Por favor, vuelva a intentarlo.", ""));
        }
    }

    public void removeAction() {
        try {

            this.vetexsoftSystem.removeProducto(producto);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "El producto ha sido registrado satisfactoriamente.", ""));

            this.producto = new Producto();

        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar el producto. Por favor, vuelva a intentarlo.", ""));
        }
    }

    public void activar(Producto p) {
        try {

            this.producto = this.vetexsoftSystem.buscarProducto("" + p.getCodigo());
            this.producto.setEstado("Activo");

            this.producto.setStored(true);
            this.vetexsoftSystem.saveProducto(this.producto);
            this.producto = new Producto();

        } catch (Exception ex) {
        }
    }

    public void inactivar(Producto p) {

        try {
            this.producto = this.vetexsoftSystem.buscarProducto("" + p.getCodigo());
            this.producto.setEstado("Inactivo");

            this.producto.setStored(true);
            this.vetexsoftSystem.saveProducto(this.producto);
            this.producto = new Producto();

        } catch (Exception ex) {
        }
    }
}
